#pragma once

namespace Vortex { namespace Wrapper { namespace Platform {

	public enum struct VK : unsigned int {
		BACK = VK_BACK,
		TAB = VK_TAB,
		CLEAR = VK_CLEAR,
		SHIFT = VK_SHIFT,
		CONTROL = VK_CONTROL,
		MENU = VK_MENU,
		PAUSE = VK_PAUSE,
		CAPITAL = VK_CAPITAL,
		ESCAPE = VK_ESCAPE,
		SPACE = VK_SPACE,
		PRIOR = VK_PRIOR,
		NEXT = VK_NEXT,
		END = VK_END,
		HOME = VK_HOME,
		LEFT = VK_LEFT,
		UP = VK_UP,
		RIGHT = VK_RIGHT,
		DOWN = VK_DOWN,
		SELECT = VK_SELECT,
		PRINT = VK_PRINT,
		EXECUTE = VK_EXECUTE,
		SNAPSHOT = VK_SNAPSHOT,
		INSERT = VK_INSERT,
		DEL = VK_DELETE,
		HELP = VK_HELP,
		LWIN = VK_LWIN,
		RWIN = VK_RWIN,
		APPS = VK_APPS,
		SLEEP = VK_SLEEP,
		NUMPAD0 = VK_NUMPAD0,
		NUMPAD1 = VK_NUMPAD1,
		NUMPAD2 = VK_NUMPAD2,
		NUMPAD3 = VK_NUMPAD3,
		NUMPAD4 = VK_NUMPAD4,
		NUMPAD5 = VK_NUMPAD5,
		NUMPAD6 = VK_NUMPAD6,
		NUMPAD7 = VK_NUMPAD7,
		NUMPAD8 = VK_NUMPAD8,
		NUMPAD9 = VK_NUMPAD9,
		MULTIPLY = VK_MULTIPLY,
		ADD = VK_ADD,
		SEPARATOR = VK_SEPARATOR,
		SUBTRACT = VK_SUBTRACT,
		DECIMAL = VK_DECIMAL,
		DIVIDE = VK_DIVIDE,
		F1 = VK_F1,
		F2 = VK_F2,
		F3 = VK_F3,
		F4 = VK_F4,
		F5 = VK_F5,
		F6 = VK_F6,
		F7 = VK_F7,
		F8 = VK_F8,
		F9 = VK_F9,
		F10 = VK_F10,
		F11 = VK_F11,
		F12 = VK_F12,
		NUMLOCK = VK_NUMLOCK,
		SCROLL = VK_SCROLL,
		LSHIFT = VK_LSHIFT,
		RSHIFT = VK_RSHIFT,
		LCONTROL = VK_LCONTROL,
		RCONTROL = VK_RCONTROL,
		LMENU = VK_LMENU,
		RMENU = VK_RMENU
	};

	///<summary>MK Constants</summary>
	public enum struct MK : unsigned short {
		None = 0,
		CONTROL = MK_CONTROL,
		SHIFT = MK_SHIFT,
		LBUTTON= MK_LBUTTON,
		RBUTTON = MK_RBUTTON,
		MBUTTON = MK_MBUTTON
	};

	///<summary>Windows Message - enumeration of necessary windows events</summary>
	public enum struct WM : unsigned int {
		MOUSEWHEEL = WM_MOUSEWHEEL,
		MOUSEMOVE = WM_MOUSEMOVE,
		RBUTTONDOWN = WM_RBUTTONDOWN,
		LBUTTONDOWN = WM_LBUTTONDOWN,
		MBUTTONDOWN = WM_MBUTTONDOWN,
		RBUTTONUP = WM_RBUTTONUP,
		LBUTTONUP = WM_LBUTTONUP,
		MBUTTONUP = WM_MBUTTONUP,
		LBUTTONDBLCLK = WM_LBUTTONDBLCLK,
		MBUTTONDBLCLK = WM_MBUTTONDBLCLK,
		RBUTTONDBLCLK = WM_RBUTTONDBLCLK,
		KEYDOWN = WM_KEYDOWN,
		KEYUP = WM_KEYUP,
		CHAR_ = WM_CHAR,
		SETCURSOR = WM_SETCURSOR
	};

	///<summary>Possible window hit test results</summary>
	public enum struct HitTestResult : int {
		Transparent = HTTRANSPARENT,
		Nowhere = HTNOWHERE,
		Client = HTCLIENT,
		Caption = HTCAPTION,
		SysMenu = HTSYSMENU,
		GrowBox = HTGROWBOX,
		Menu = HTMENU,
		HScroll = HTHSCROLL,
		VScroll = HTVSCROLL,
		MinButton = HTMINBUTTON,
		MaxButton = HTMAXBUTTON,
		Left = HTLEFT,
		Right = HTRIGHT,
		Top = HTTOP,
		TopLeft = HTTOPLEFT,
		TopRight = HTTOPRIGHT,
		Bottom = HTBOTTOM,
		BottomLeft = HTBOTTOMLEFT,
		BottomRight = HTBOTTOMRIGHT,
		Border = HTBORDER,
		Object = HTOBJECT,
		Close = HTCLOSE,
		Help = HTHELP
	};

}}}